GtkTextHandle: Look up for the first child of a scrolled window found
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 24 Feb 2016 16:19:48 +0000 (17:19 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Wed, 24 Feb 2016 16:58:19 +0000 (17:58 +0100)
Text handles use to connect to the first GtkScrollable up the hierarchy
so they can be repositioned when scrolling. It makes more sense to look
up the first child of a GtkScrolledWindow, it must be an scrollable too,
and will be the scrollable that can actually change the position of the
text handles.

https://bugzilla.gnome.org/show_bug.cgi?id=761676

gtk/gtktexthandle.c

index 5ed6ebce31cd6d10db9bc0eed2b3bd9809acf0ea..cc98d226a01217ebc9d4c170375bd37c601311cf 100644 (file)
@@ -544,6 +544,21 @@ _gtk_text_handle_update_scrollable (GtkTextHandle *handle,
                         handle);
 }
 
+static GtkWidget *
+gtk_text_handle_lookup_scrollable (GtkTextHandle *handle)
+{
+  GtkTextHandlePrivate *priv;
+  GtkWidget *scrolled_window;
+
+  priv = handle->priv;
+  scrolled_window = gtk_widget_get_ancestor (priv->parent,
+                                             GTK_TYPE_SCROLLED_WINDOW);
+  if (!scrolled_window)
+    return NULL;
+
+  return gtk_bin_get_child (GTK_BIN (scrolled_window));
+}
+
 static void
 _gtk_text_handle_parent_hierarchy_changed (GtkWidget     *widget,
                                            GtkWindow     *previous_toplevel,
@@ -574,7 +589,7 @@ _gtk_text_handle_parent_hierarchy_changed (GtkWidget     *widget,
         }
     }
 
-  scrollable = gtk_widget_get_ancestor (widget, GTK_TYPE_SCROLLABLE);
+  scrollable = gtk_text_handle_lookup_scrollable (handle);
   _gtk_text_handle_update_scrollable (handle, GTK_SCROLLABLE (scrollable));
 }
 
@@ -603,7 +618,7 @@ _gtk_text_handle_set_parent (GtkTextHandle *handle,
                           G_CALLBACK (_gtk_text_handle_parent_hierarchy_changed),
                           handle);
 
-      scrollable = gtk_widget_get_ancestor (parent, GTK_TYPE_SCROLLABLE);
+      scrollable = gtk_text_handle_lookup_scrollable (handle);
     }
 
   _gtk_text_handle_update_scrollable (handle, GTK_SCROLLABLE (scrollable));